package code19_jdk8.stream;

import java.util.List;

import code19_jdk8.stream.Emp.State;
public class TestMiddle01 {

	public static void main(String[] args) {
		//f1();
		
		//f2();
		
		//f3();
		
		f4();
	}

	private static void f4() {
		// distinct 元素去重. 通过流中元素的 hashCode 和 equals 方法进行去重
		Emp.getData().stream()
		.distinct()
		.forEach(System.out::println);
	}

	private static void f3() {
		// skip(long n) 跳过元素. 返回一个 扔掉了 n 个元素的流, 如果流中元素不足 n, 则返回一个空的流
		Emp.getData().stream()
		.skip(18)// 还剩 3个
		.skip(10)// 不足10个, 返回以 空的 流
		.forEach(System.out::println);
	}

	private static void f2() {
		// limit(long maxSize) 截断流, 使其元素不超过指定的数量
		List<Emp> data = Emp.getData();
		// 取出集合中的前5个元素进行遍历输出
		data.stream()
		.limit(5)
		.forEach(System.out::println);
	}

	private static void f1() {
		// filter(Predicate<? super T> predicate) 从流中获取符合条件的元素
		List<Emp> data = Emp.getData();
		// 筛选(并输出)出 age大于或等于30的员工
		data.stream()
		.filter( e -> {
			//System.out.println(e);
			// 返回 true, 会保留该元素, 返回 false, 会舍弃该元素
			return e.getAge() >= 30;
		})
		.forEach( System.out::println );
		
		System.out.println("--------------");
		// 输出没有在休假的员工
		data.stream()
		.filter( e -> !e.getState().equals(State.VOCATION) )
		.forEach(System.out::println);
		System.out.println("--------------");
		// 输出忙碌的员工中的前3个
		data.stream()
		.filter( e -> e.getState().equals(State.BUSY) )
		.limit(3)
		.forEach(System.out::println);
	}
	
}
